﻿using Adnc.Application.Shared.Dtos;
using Adnc.Application.Shared.Services;
using System.Collections.Generic;
using System.Threading.Tasks;
using WYT.Pro.Application.Contracts.Dtos.Product;

namespace WYT.Pro.Application.Contracts.Services
{
    /// <summary>
    /// 商品服务
    /// </summary>
    public interface IProductAppService : IAppService
    {
        /// <summary>
        /// 获取商品详情
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<AppSrvResult<ProductDetailDto>> GetProductDetailById(ProductSearchDto input);

        /// <summary>
        /// 获取云仓商品信息
        /// </summary>
        /// <param name="Language"></param>
        /// <returns></returns>
        Task<AppSrvResult<List<ProductListDto>>> GetWarProductList(string Language);

        /// <summary>
        /// 获取规格详情
        /// </summary>
        /// <param name="ids"></param>
        /// <param name="hasGift"></param>
        /// <returns></returns>
        Task<AppSrvResult<List<ProductSizeWithGiftDetailDto>>> GetProductSizeDetailById(long[] ids, bool hasGift);

        /// <summary>
        /// 获取所有云仓商品规格详情
        /// </summary>
        /// <returns></returns>
        Task<AppSrvResult<List<ProductSizeSimpleInforDto>>> GetAllWarehouseProduct();

        /// <summary>
        /// 获取商品简单信息
        /// </summary>
        /// <param name="ids"></param>
        /// <returns></returns>
        Task<AppSrvResult<List<ProductSizeSimpleInforDto>>> GetProductSizeSimpleInforById(long[] ids);

        /// <summary>
        /// 查询商品
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<AppSrvResult<List<ProductListDto>>> ProductSearch(SimpleSearchDto<string> input);

        /// <summary>
        /// 获取周边产品
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<AppSrvResult<List<ProductListDto>>> GetPeripheralProducts(SearchDto input);

        /// <summary>
        /// 修改商品数量
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<AppSrvResult> ChangeProductNum(ProductNumChangeDto input);

        /// <summary>
        /// 获取通排调补信息
        /// </summary>
        /// <param name="language"></param>
        /// <returns></returns>
        Task<AppSrvResult<List<GroupedProductDto>>> GetGroupedProductInfor(string language);

        /// <summary>
        /// 添加评论
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<AppSrvResult<bool>> ReviewAdd(ProductReviewAddDto input);

        /// <summary>
        /// 获取商品评论列表
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<AppSrvResult<PageModelDto<ProductReviewListDto>>> GetProductReview(ProductReviewPagedSearcheDto input);

        /// <summary>
        /// 获取商品评论数量
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<AppSrvResult<ProductReviewQuantityDto>> GetProductReviewNum(long input);

        /// <summary>
        /// 评论回复
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<AppSrvResult> ReviewReply(long userId, ProductReviewReplyAddDto input);

        /// <summary>
        /// 获取评论详情
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        Task<AppSrvResult<ProductReviewDetailDto>> GetReviewDetail(long input);
    }
}
